home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / JPP_B4.ARJ / JPP.TXT < prev    next >
Text File  |  1992-05-01  |  29KB  |  715 lines

  1.  
  2.   ┌──────────────────────────────────────────────────────────┐
  3.   │ This program is not finished.  There are still bugs left │
  4.   │ and functionality missing.  I'm grateful for ideas, bug  │
  5.   │ reports etc.  My email address is arnt@swix.ifi.unit.no. │
  6.   │ Please read this file before you mail me a question.     │
  7.   └──────────────────────────────────────────────────────────┘
  8.  
  9.   ┌──────────────────────────────────────────────────────────┐
  10.   │ To use this program you need a copy of the Spectrum ROM, │
  11.   │ which is not included since it is copyrighted.           │
  12.   └──────────────────────────────────────────────────────────┘
  13.  
  14. This program emulates a Sinclair Spectrum 48k Z80-based computer 
  15. on any PC with at least an 80386SX processor and VGA graphics.
  16.   The following Spectrum features are implemented:
  17. - Graphics, nearly perfectly.  The border is implemented, but 
  18. flashing and special effects don't work.
  19. - The keyboard, nearly perfectly.
  20. - Kempston joystick, if you have a PC joystick.  Both buttons on 
  21. the PC joystick press the single Kempston button.
  22. - Sound, but you might not want it.  Since the emulator doesn't 
  23. run at the same speed as a real Spectrum the pitch is most often 
  24. wrong.  (Well, one version does, if it works.)
  25. - Not the tape interface, yet.
  26.  
  27.  
  28.  
  29.                        Licence agreement
  30.  
  31. JPP is copyright (c) 1991-92 Arnt Gulbrandsen, except convert.exe, 
  32. which is copyright (c) 1992 Henk de Groot, and specdisc.exe, which 
  33. is copyright (c) 1992 Brian Havard.
  34.   All rights are reserved, with the sole exception that, as long 
  35. as the archive is kept together and no fee is involved, JPP may be 
  36. copied by anyone.
  37.   It is acceptable for BBSes to charge for general use but not 
  38. specifically (additionally) for downloading of JPP.
  39.   Disk vendors, user groups, or others who wish to distribute JPP 
  40. for a fee may apply for permission.  Write to Arnt Gulbrandsen, 
  41. Kometv. 8, N-7036 Trondheim, Norway.
  42.  
  43.  
  44.  
  45.                              Files
  46.  
  47. convert.exe    Converts snapshots between various formats.
  48.                  Written by Henk de Groot.
  49. extract.exe    Extracts the ROM from data files.
  50. jpp.exe        The main emulator.
  51. jpp-486.exe    The exact-speed version, for very fast machines.
  52. jpp.txt        This file.
  53. path.jpp       Contains the locations of support files.
  54. readme.txt     A GIF showing, among others, Traci Lords.
  55. specdisc.exe   Converts snapshots on MGT disks (48K SNP) to
  56.                  .SNA format.  Written by Brian Havard,
  57.                  s902150@minyos.xx.rmit.oz.au.
  58.  
  59.  
  60.  
  61.                              Usage
  62.  
  63. JPP will try to interpret any command-line argument to be either a 
  64. ROM image or a snapshot, and load it.
  65.   During execution, the 40 keys which correspond in layout to the 
  66. Spectrum keyboard work as you'd expect.  There are also a number 
  67. of extensions:
  68. - Enter is Enter.
  69. - Backspace is Caps-0.
  70. - Both shifts are Caps-shift.
  71. - Both alts are Symbol-shift.
  72. - 0-9 on the keypad should work.
  73. - +-*/ on the keypad work by 'pressing' Symbol-shift and another 
  74. key.
  75. - The cursor keys are Caps-5678.
  76.   If you 'press' Caps-shift or Symbol-shift in several ways (eg. 
  77. by pressing both DEL and a shift key) the (Spectrum) key will be 
  78. released as soon as you release one (PC) key; this is because the 
  79. emulator only counts whether a key is pressed or not, not (I know 
  80. this sounds meaningless) how many times each key is pressed at 
  81. once.
  82.   Seven keys between 0-P-L-M and Backspace-Enter-Shift are unused.  
  83. Unfortunately there's no way to find out what they characters they 
  84. normally send, so JPP can't feed the 'normal' character to the 
  85. Spectrum.  The key immediately to the right of 0, for instance, 
  86. sends - and _ on North American keyboards, but + and ? on my 
  87. Norwegian keyboard.
  88.   Some function keys are interpreted by the emulator:
  89. - F2 saves a snapshot.
  90. - F3 loads a snapshot.
  91. - F4 loads the snapshot which was saved or loaded last; very handy 
  92. if you need to try a difficult part of a game again and again.
  93. - F5 disables the sound.  Oh, blissful silence!
  94. - F6 enables the sound.
  95. - F12 aborts the emulator immediately.
  96.   All other keys are ignored, except Ctrl-Alt-Del, which reboots 
  97. the computer.
  98.  
  99.  
  100.  
  101.                             PATH.JPP
  102.  
  103. This file acts like the PATH statement for .SNA and .ROM files.  
  104. It must be located in the current directory or along the PATH.
  105.  
  106.  
  107.  
  108.                     Copying the ROM to a PC
  109.  
  110. I'm not certain of the legal status of the Spectrum ROM.  Three 
  111. other emulators are distributed with the ROM, but one of them 
  112. rumouredly had to be withdrawn because of it.  I'm not risking 
  113. that.
  114.   There are several ways to get the ROM.  A lot of people have 
  115. asked me for a copy, and I've told a lot of people No.  I may give 
  116. you a copy, but *only* if you can prove to me that you have a 
  117. working Spectrum.  Do
  118.     FOR n=0 TO 19: PRINT PEEK n: NEXT n
  119. and mail me the result.
  120.   If you have one which doesn't work, or which is at your parents' 
  121. home, or whatever, please don't ask me.  You won't get the ROM and 
  122. I'll feel bad because I hate to say no.
  123.   The program "extract.exe" will extract the ROM from a file in 
  124. which it is embedded.  The FTP site terminator.cc.umich.edu has 
  125. one, in /atari/emulators/spectrum.lzh.  The file which contains 
  126. the ROM is called specci.dat.  I haven't asked the Terminator 
  127. moderator about the status of the ROM, and you might not care to 
  128. either, at least not before you've downloaded it :-)
  129.   Alternatively, save the ROM do disk using
  130.     CLEAR 49152: FOR n=0 TO 16383: POKE n+49152,PEEK n: NEXT n
  131.     SAVE "ROM" CODE 49152,16384
  132.   The save syntax may be wrong for your disk drive, but you get 
  133. the drift.  If you have a Plus D, MGT or Disciple drive you can 
  134. use Specdisc to convert the file to a Mess-DOS file.  A program 
  135. called 22Disk (22DSKnnn.ZIP, nnn is the version, shareware) may be 
  136. able to copy the file to the hard disk, but anyway you can use a 
  137. sector editor to save the entire disk to a Mess-DOS file and use 
  138. Extract to extract the ROM from that file.  Two good sector 
  139. editors are Norton DE and Anadisk (ANADnnn.ZIP, shareware).  To be 
  140. able to use Anadisk the disk must have interleave 1.  Turn off 
  141. sector headers.
  142.   If you have a serial port for your Spectrum it's easy to 
  143. transfer the ROM to the PC, you probably know how to if you have 
  144. one.
  145.  
  146.  
  147.  
  148.                      Copying games to a PC
  149.  
  150. The easiest way is to use a Plus D/Disciple/MGT disk drive to snap 
  151. the game, then Specdisc to convert it to .sna format.  This has 
  152. the disadvantage that the game may detect that the Spectrum has a 
  153. disk drive and presume that it won't disappear (which it does once 
  154. the snapshot is run under an emulator).
  155.   Alternatively, a Mirage Microdriver snapshot box may be used to 
  156. snap the game, either to Microdrive or to tape.  From a Microdrive 
  157. it's easy to transfer it to a PC via serial cable.  From tape it's 
  158. rather hard.
  159.   One real hacker rewrote his Spectrum ROM to snap directly to 
  160. serial cable; he just triggers an NMI, the game is sent out and in 
  161. the other end of the cable a COPY command or something stores the 
  162. output directly to a snapshot file.  Not for the novice, but very 
  163. elegant.
  164.   Peter McGavin's emulator can read from tape via a sound sampler, 
  165. and uses the same snapshot format as JPP.
  166.   Another PC emulator seems to be able to read Spectrum tapes via 
  167. the parallel port.  I've a copy of it, but the docs are in Spanish 
  168. or Portuguese; I can't read either language.  I'd like to hear 
  169. from someone who can.  Once I get a translation of the relevant 
  170. docs adding tape support should be a ten-minute job.
  171.  
  172.  
  173.  
  174.                        The CPU emulation
  175.  
  176. My Z80 emulation code is 50-100% faster than any other Z80 
  177. emulator I've seen on the PC.  The main reasons are that nearly 
  178. all the Z80 registers are kept in 386 registers and that very 
  179. little time is spent on instruction decoding.  The design is based 
  180. on Peter McGavin's Spectrum emulator on the Amiga.
  181.   It is perfectly possible to rewrite JPP to work on a 286, less 
  182. than a day's work, but it would run half as fast again on a 286/16 
  183. as this version does on a 386SX/16.  Too slow to bother, IMHO.
  184.   The register allocation is as follows:
  185.  Z80  386
  186.   AF  AX       F is kept in AH, A in AL
  187.   BC  CX
  188.   DE  DX
  189.   HL  BX       In BX since BX can access memory
  190.   SP  BP
  191.   PC  SI
  192. IX, IY, I, R and the alternates are kept in memory.  DI is used as 
  193. scratch register.  DS points to the Spectrum address space, ES 
  194. points to a special bookkeeping table, FS and GS to a 128k table 
  195. of decoded instructions.  (FS and GS don't exist on the 286.)
  196.   All the other emulators I've seen (except Peter's) decode each 
  197. instruction every time it is used.  I avoid that by storing the 
  198. address of the emulation routine for each address in a special 
  199. 128k table.  FS points to a 64k segment which contains the entries 
  200. for the even Z80 addresses, GS  - blah blah - odd.  Each opcode 
  201. knows how long it is and whether it is located on an even or odd 
  202. address so it can jump through the correct table.
  203.   In order to work with self-modifying code the decoding of an 
  204. address must be invalidated whenever it is written to.  Another 
  205. 64k table (ES) keeps track of which decodings must be invalidated 
  206. when an address is written to.  Bit N at address M is set if the 
  207. decoding of address M-N depends on address M, for N<4.  Bits 4..6 
  208. are unused (0) and bit 7 is set if the address is write protected.  
  209. Thus, an opcode which writes to eg. [di] need only
  210.     test [byte ptr es:di],255  ;rom, or previously decoded?
  211.     jnz fix_write_di           ;any bit set -> go fix it (slow!)
  212.     jmp [word ptr fs:si]       ;[word ptr gs:si-1] is si is odd
  213.   Each opcode must be emulated twice, 192K RAM must be used for 
  214. extra tables, and the code won't run on anything smaller than a 
  215. 386SX since so many segment registers are used, but!  It is twice 
  216. as fast as anything else.
  217.   The only way to speed it up further is to compile and optimise, 
  218. which could eliminate a lot of flag handling (many instructions 
  219. affect several flags, at most one of which is actually used) and 
  220. concatenate some instructions (eg. ld a,e; add a,7; ld e,a).  One 
  221. possibility is to translate the Z80 code to a simple 2-register 
  222. language, optimise the resulting code and finally interpret it.  
  223. But would the optimised code be fast enough to offset the time 
  224. taken to optimise it?
  225.   To return to reality, there are some known bugs:
  226. - The H processor flag is set incorrectly by 16-bit arithmetic 
  227. instructions (it is the carry/borrow between bits 7 and 8, not 11 
  228. and 12).
  229. - The two 'unused' bits in the Z80 F register may be corrupted by 
  230. some instructions on some processors.  The 386 seems ok but future 
  231. Intel processors may not.
  232. - Interrupts can occur only directly after CALL, JR, JP, RET, 
  233. RETI, RETN and HALT instructions.
  234. - LDIR may turn off the write protection of a few bytes at either 
  235. end of the ROM (it resets bit 7 in ES of up to five bytes before 
  236. the start if the destination block and one byte after its end).
  237. - R is not quite perfectly emulated.  LD A,R loads bits 0..6 of A 
  238. from 8253 timer 0 and bit 7 from R (set by LD R,A).
  239.   There also is at least one (more) bug, which I am having trouble 
  240. tracking down.  It probably has to do with flag handling.
  241.   JPP emulates most documented and undocumented opcodes, the 
  242. exceptions being IND, INI, INDR, INIR, OTDR, OTIR and the shift- 
  243. with-autocopy instructions.  Instructions which aren't recognised 
  244. abort the emulator.
  245.   Starion uses OUTI and International Karate OUTD so they are now 
  246. partially emulated.  B and HL are modified, but the flags aren't 
  247. set and the port isn't written to.
  248.   If you want the source, mail me.  It's not completely bug-free, 
  249. but I don't think it ever will be.  It should be relatively 
  250. painless to translate it to other CPUs, or to emulate other Z80 
  251. micros.
  252.  
  253.  
  254.  
  255.                      The graphics emulation
  256.  
  257. JPP (now) runs in 320*240 16-colour mode.  Flashing is emulated by 
  258. changing the bytes in the PC video memory rather than by changing 
  259. the palette.
  260.   Unfortunately I don't know terribly much about the internals 
  261. about the VGA chips, so some computers may misbehave when JPP 
  262. attempts to switch to 320*240*16 mode.  I made more or less the 
  263. same changes to 320*200*16 as those which change 320*200*256 to 
  264. 320*240*256.  Please tell me if JPP behaves strangely on your 
  265. computer.
  266.   The fast version updates the entire PC screen from the Spectrum 
  267. screen every 3rd interrupt (ie. the refresh frequency is 16.67Hz).  
  268. The exact-speed version (JPP-486) updates as many lines as there 
  269. is time to before each interrupt (ie. the refresh frequency is at 
  270. least 2.08Hz, at most 50Hz).
  271.  
  272.  
  273.  
  274.                       The sound emulation
  275.  
  276. The Spectrum sound system, as you probably know, is simple.  The 
  277. processor controls the loudspeaker level, and by raising and 
  278. lowering it at regular intervals can make tones.
  279.   The PC system is, for practical purposes, exactly the same.  So 
  280. emulating the Spectrum sound system should be simple?
  281.   No, because the PC has to sample the joystick and update the 
  282. screen as well.  Both require rather long time slices.  Also, 
  283. unless the instructions take exactly as long as on the real 
  284. Spectrum, the delay loops won't work and the tones will be thrown 
  285. off.
  286.   The standard JPP ignores timing and just outputs the sound as 
  287. the Spectrum program does.  Hopefully it'll sound much as 
  288. intended.
  289.   JPP-486 is intended to do better, but still has to sample the 
  290. joystick and update the screen.  The method I've chosen is to try 
  291. to get the correct interval between port writes except across 
  292. interrupts.  For technical reasons this means that frequencies 
  293. below approximately 160Hz won't come across very well.  'Not very 
  294. well' indeed.  There also is a limit to how high JPP-486 can go, 
  295. roughly proportional to the speed of the processor, and a limit to 
  296. how accurately it can match the intended frequency.
  297.   Since sound output requires extremely accurate timing the screen 
  298. output is more or less suspended while the sound is being made.  
  299. Currently the refresh frequency may be as low as 2.08Hz, but it 
  300. would be easy to increase that limit.
  301.  
  302.  
  303.  
  304.                           Peripherals
  305.  
  306. The Spectrum has very little in the way of peripherals, and JPP 
  307. emulates even less.
  308.   On ports XXFEh, JPP emulates the keyboard on input, and the 
  309. speaker and border on output.
  310.   On ports XX1Fh, JPP emulates a Kempston joystick on input and 
  311. nothing on output.  If the PC doesn't have a joystick the Kempston 
  312. always is in the neutral position.
  313.   On all other ports JPP returns FFh on input and ignores output.
  314.   Since reading the PC joystick position is inordinately slow, JPP 
  315. reads it every 0.02 second (starting when the Spectrum program 
  316. first accesses the Kempston) and feeds the value read to the 
  317. Spectrum whenever the Spectrum program reads the Kempston.  The 
  318. button status is read whenever the Spectrum program wants to.
  319.  
  320.  
  321.  
  322.                          General Notes
  323.  
  324. There is a not very active mailing list for the Spectrum, mail 
  325. mauricio@mozart.aero.ufl.edu to be added.  New versions of JPP 
  326. will be announced on the list.
  327.   You may have wondered about the name JPP.  Try typing J 
  328. Symbolshift-P Symbolshift-P on a Spectrum; I was feeling rather 
  329. sentimental when I named the emulator.
  330.   This document is based on the documentation Peter McGavin wrote 
  331. for his Spectrum emulator.  I am extremely grateful to Peter for 
  332. all his help.
  333.   Henk de Groot has fixed the Spectrum ROM bugs, but at least one 
  334. game breaks on his ROM.  Unfortunately his email address is likely 
  335. to change in the near future; Mauricio or I will know what it is.  
  336. He has also written a program, "convert.exe", to convert snapshots 
  337. between .sp and .sna format.  This program is enclosed.
  338.   The joystick emulation now uses an absolute-time routine which 
  339. should work correctly no matter how fast the processor is.  If the 
  340. 558 in your joystick interface is clocked faster or slower than 
  341. mine (the neutral position is off-centre), tell me!  I've also 
  342. changed the autodetect code, JPP now reads the stick and assumes 
  343. it's there if reasonable values are returned.
  344.   There may be some linguistic errors in this document.  Sorry 
  345. about that, but please bear in mind that English is not my first 
  346. language.
  347.  
  348.  
  349.  
  350.                         Other emulators
  351.  
  352. I have about six other emulators, and there are several that I 
  353. don't have.  All, except where noted, are PD.  They're not easy to 
  354. get hold of, so mail me if you want any.
  355.  
  356. PC:
  357.   VGASPEC.EXE, originally by Alfonso Olloqui.  Needs 286+VGA, runs 
  358. at less that half the speed of JPP.  A later version by another 
  359. author seems to be better, but I haven't tested it yet.  The newer 
  360. version is supposed to have tape support.  This is the one with 
  361. the Spanish/Portuguese doc file.
  362.   SP.EXE, untested, I've consistently forgotten to bring it home.  
  363. CGA, I think, and a built-in debugger.
  364.   Brian Havard wrote, but didn't release, an emulator.  Simple and 
  365. short, slow, not developed very far since it was so slow.
  366.   There's a Dutch emulator which I've been promised a copy of.
  367.   There may be another emulator, someone on USENET mentioned one 
  368. but didn't reply to my mail.  I foolishly didn't save the original 
  369. posting.  Shareware, source available for US$25, 50% faster than 
  370. JPP, runs on 286.
  371.  
  372. Amiga:
  373.   Spectrum, by Peter McGavin.  Very good, JPP is based to a large 
  374. extent on it.  Needs about a 25MHz machine to run at full speed.  
  375. Has tape support.
  376.   KGB.  I haven't seen it.  A bit slower than Peter's, and the 
  377. version Peter saw wouldn't work on the Amiga 3000.
  378.   An Italian emulator which I don't know the name of.  Excellent 
  379. compatibility, rather fast.  May be shareware.
  380.   Several unreleased emulators.  Peter knows more about them.
  381.  
  382. Atari ST/TT:
  383.   One, called Spectrum.  Don't know anything about it, but the doc 
  384. file is written in quite the worst English I've seen.  Available 
  385. by anonymous ftp from terminator.cc.umich.edu.
  386.  
  387. Acorn Archimedes:
  388.   A company called Arxe wrote one, intended to be commercial but 
  389. never released because Amstrad wouldn't permit Arxe to enclose the 
  390. ROM.
  391.   Someone called D. Lawrence wrote another, or maybe the same.  
  392. This one is floating around but nobody has any documentation.  I 
  393. don't know what its status is.  Runs at about 70% of Spectrum 
  394. speed on an ARM2, not quite perfect graphics emulation.
  395.  
  396. Commodore 64:
  397.   The Whitby Software Spectrum simulator is a rewrite of the 
  398. Spectrum Basic.  It will not run machine-code programs.  I don't 
  399. know whether it's PD, shareware, or commercial.
  400.  
  401.  
  402.  
  403.                     The snapshot file format
  404.  
  405. This format (filetype .SNA) is the format used by the Mirage 
  406. Microdriver "Dump" command.  It is also used by Peter McGavin's 
  407. Spectrum emulator for the Amiga.
  408.  
  409.  Byte offset    Contents
  410.  
  411.     0          i  register
  412.     1          l' register
  413.     2          h' register
  414.     3          e' register
  415.     4          d' register
  416.     5          c' register
  417.     6          b' register
  418.     7          f' register
  419.     8          a' register
  420.     9          l  register
  421.    10          h  register
  422.    11          e  register
  423.    12          d  register
  424.    13          c  register
  425.    14          b  register
  426.    15          iy low register
  427.    16          iy high register
  428.    17          ix low register
  429.    18          ix high register
  430.    19          bit 2 contains iff2
  431.    20          r register
  432.    21          flags register
  433.    22          a register
  434.    23          sp low register
  435.    24          sp high register
  436.    25          interrupt mode (0, 1 or 2)
  437.    26          border colour (0..7).
  438.  27..49178     48 kbytes ram dump
  439.  
  440. When the registers have been loaded a RETN command is required to 
  441. start the program.
  442.   Since Peter's emulator stores rubbish in byte 26 JPP sets the 
  443. border to black if byte 26 is larger than 7.
  444.  
  445.  
  446.  
  447.          List of working programs (and some that don't)
  448.  
  449. I haven't tested them very thoroughly, most games bore me very 
  450. quickly, but at least the title screen and the start of the first 
  451. level work.
  452.   NB:  I'm willing to copy only the stuff in the horizons and demos 
  453. subdirectories.  Don't bother asking for anything else.
  454.  
  455. /spectrum/demos/cyber2.sna
  456. /spectrum/demos/drill-de.sna
  457. /spectrum/demos/king-dem.sna
  458. /spectrum/demos/mean-dem.sna
  459. /spectrum/demos/trant-de.sna
  460. /spectrum/dontwork/batman.sna
  461. /spectrum/dontwork/full-thr.sna
  462. /spectrum/dontwork/ghosts.sna
  463. /spectrum/dontwork/mugsy.sna
  464. /spectrum/dontwork/scumball.sna
  465. /spectrum/dontwork/sidewise.sna
  466. /spectrum/games/1942.sna
  467. /spectrum/games/3dtank.sna
  468. /spectrum/games/alchemis.sna
  469. /spectrum/games/alien8.sna
  470. /spectrum/games/android2.sna
  471. /spectrum/games/ant-atta.sna
  472. /spectrum/games/arcturus.sna
  473. /spectrum/games/arkanoid.sna
  474. /spectrum/games/ashes.sna
  475. /spectrum/games/atf.sna
  476. /spectrum/games/athena.sna
  477. /spectrum/games/aticatac.sna
  478. /spectrum/games/atrium.sna
  479. /spectrum/games/aufmonty.sna
  480. /spectrum/games/automani.sna
  481. /spectrum/games/backgamm.sna
  482. /spectrum/games/basil.sna
  483. /spectrum/games/batty.sna
  484. /spectrum/games/bombjac2.sna
  485. /spectrum/games/booty.sna
  486. /spectrum/games/bubblebo.sna
  487. /spectrum/games/cavelon.sna
  488. /spectrum/games/chuckegg.sna
  489. /spectrum/games/commando.sna
  490. /spectrum/games/cookie.sna
  491. /spectrum/games/cyber.sna
  492. /spectrum/games/cyberun.sna
  493. /spectrum/games/cyclone.sna
  494. /spectrum/games/daley-d1.sna
  495. /spectrum/games/daley-d2.sna
  496. /spectrum/games/darkside.sna
  497. /spectrum/games/darkstar.sna
  498. /spectrum/games/deathcha.sna
  499. /spectrum/games/defender.sna
  500. /spectrum/games/dictator.sna
  501. /spectrum/games/draughts.sna
  502. /spectrum/games/dustin.sna
  503. /spectrum/games/dynadan1.sna
  504. /spectrum/games/dynadan2.sna
  505. /spectrum/games/eaglenes.sna
  506. /spectrum/games/elite.sna
  507. /spectrum/games/enduro.sna
  508. /spectrum/games/exodus.sna
  509. /spectrum/games/exolon.sna
  510. /spectrum/games/fist.sna
  511. /spectrum/games/force.sna
  512. /spectrum/games/fp.sna
  513. /spectrum/games/froggy.sna
  514. /spectrum/games/g-force.sna
  515. /spectrum/games/galaxian.sna
  516. /spectrum/games/garfield.sna
  517. /spectrum/games/gauntlet.sna
  518. /spectrum/games/gunfrght.sna
  519. /spectrum/games/gyroscop.sna
  520. /spectrum/games/harrier.sna
  521. /spectrum/games/headball.sna
  522. /spectrum/games/headroom.sna
  523. /spectrum/games/heathrow.sna
  524. /spectrum/games/highway.sna
  525. /spectrum/games/hobbit.sna
  526. /spectrum/games/horace.sna
  527. /spectrum/games/ikari.sna
  528. /spectrum/games/is-chess.sna
  529. /spectrum/games/jetpac.sna
  530. /spectrum/games/jsw.sna
  531. /spectrum/games/karate.sna
  532. /spectrum/games/knightlo.sna
  533. /spectrum/games/kokotoni.sna
  534. /spectrum/games/kong.sna
  535. /spectrum/games/kosmic.sna
  536. /spectrum/games/krakout.sna
  537. /spectrum/games/lazerzne.sna
  538. /spectrum/games/lemans.sna
  539. /spectrum/games/lightfor.sna
  540. /spectrum/games/lunarjet.sna
  541. /spectrum/games/madmix.sna
  542. /spectrum/games/manicmin.sna
  543. /spectrum/games/matchpoi.sna
  544. /spectrum/games/maze.sna
  545. /spectrum/games/meteor.sna
  546. /spectrum/games/mission.sna
  547. /spectrum/games/monty-mo.sna
  548. /spectrum/games/mugsy.sna
  549. /spectrum/games/necropol.sna
  550. /spectrum/games/nifty.sna
  551. /spectrum/games/nightgun.sna
  552. /spectrum/games/orbiter.sna
  553. /spectrum/games/orbix.sna
  554. /spectrum/games/pacland.sna
  555. /spectrum/games/pacmania.sna
  556. /spectrum/games/penetrat.sna
  557. /spectrum/games/phenix.sna
  558. /spectrum/games/pioneer.sna
  559. /spectrum/games/pssst.sna
  560. /spectrum/games/rambo-3.sna
  561. /spectrum/games/ranarama.sna
  562. /spectrum/games/renegade.sna
  563. /spectrum/games/rollingt.sna
  564. /spectrum/games/sabre.sna
  565. /spectrum/games/sam-spad.sna
  566. /spectrum/games/sam-stoa.sna
  567. /spectrum/games/samfox.sna
  568. /spectrum/games/scooby.sna
  569. /spectrum/games/scrabble.sna
  570. /spectrum/games/sentinel.sna
  571. /spectrum/games/sherlock.sna
  572. /spectrum/games/sidearms.sna
  573. /spectrum/games/sirfred.sna
  574. /spectrum/games/skiing.sna
  575. /spectrum/games/spiders.sna
  576. /spectrum/games/spindizy.sna
  577. /spectrum/games/spyvsspy.sna
  578. /spectrum/games/st-berna.sna
  579. /spectrum/games/star-rai.sna
  580. /spectrum/games/starion.sna
  581. /spectrum/games/starquak.sna
  582. /spectrum/games/survivor.sna
  583. /spectrum/games/talk-che.sna
  584. /spectrum/games/tech-ted.sna
  585. /spectrum/games/tempest.sna
  586. /spectrum/games/terra.sna
  587. /spectrum/games/tetris.sna
  588. /spectrum/games/thing.sna
  589. /spectrum/games/thingbb.sna
  590. /spectrum/games/thunder.sna
  591. /spectrum/games/thunderc.sna
  592. /spectrum/games/tll.sna
  593. /spectrum/games/tomahawk.sna
  594. /spectrum/games/train-ga.sna
  595. /spectrum/games/transam.sna
  596. /spectrum/games/trantor.sna
  597. /spectrum/games/trashman.sna
  598. /spectrum/games/tron.sna
  599. /spectrum/games/uridium.sna
  600. /spectrum/games/virus.sna
  601. /spectrum/games/wally.sna
  602. /spectrum/games/warlord.sna
  603. /spectrum/games/wheelie.sna
  604. /spectrum/games/whodunit.sna
  605. /spectrum/games/xevious.sna
  606. /spectrum/games/zeus.sna
  607. /spectrum/games/zynaps.sna
  608. /spectrum/games/zzoom.sna
  609. /spectrum/horizons/bubbleso.sna
  610. /spectrum/horizons/characte.sna
  611. /spectrum/horizons/draw.sna
  612. /spectrum/horizons/evolutio.sna
  613. /spectrum/horizons/life.sna
  614. /spectrum/horizons/mon.sna
  615. /spectrum/horizons/montecar.sna
  616. /spectrum/horizons/wall.sna
  617. /spectrum/horizons/waves.sna
  618. /spectrum/test/buggy.sna
  619. /spectrum/test/cheqflag.sna
  620. /spectrum/test/editamon.sna
  621. /spectrum/test/firelord.sna
  622. /spectrum/test/flyshark.sna
  623. /spectrum/test/ground.sna
  624. /spectrum/test/imposbal.sna
  625. /spectrum/test/impossib.sna
  626. /spectrum/test/thrust2.sna
  627.  
  628.   The games that don't work either use an unknown opcode, (eg. 
  629. Batman, DD CD), non-emulated hardware (eg. Sidewize, port 40FF), 
  630. are faulty snaps (Scumball, probably), or fail for some other 
  631. reason.  I believe there still is at least one emulation bug, 
  632. probably in a memory store instruction.
  633.  
  634.  
  635.  
  636.                             History
  637.  
  638.   Beta 1
  639.   First release available via anonymous FTP.
  640.  
  641.   Beta 2
  642.   New joystick routine which doesn't need calibration.
  643.   New joystick autodetect, modeled after Info+ v1.50.
  644.   LD A,R randomises the lower 7 bits of A after loading R into A.
  645.   The two unused flag bits are preserved during RLC (IX+d).
  646.   All jump destinations are placed on even addresses; supposed to 
  647. be slightly faster on the 386SX.
  648.   The border colour is read correctly from snapshots.
  649.   JPP aborts if run on a 286 or smaller.
  650.   "convert.exe" added.
  651.  
  652.   Beta 3
  653.   Partial OUTI emulation added to make Starion run.  Full 
  654. emulation would be too slow.
  655.   "extract.exe" added.
  656.   Backtracking added, but disabled due to strange crashes.
  657.   "Out of memory" handled gracefully.
  658.   IN {B,C,D,E,H,L},(C) store the result in the correct register, 
  659. not in A.
  660.   Switched to 16-colour mode; flicker-free and slightly faster.  
  661.   The normal colours have been brightened slightly.
  662.   A Kempston is always emulated, but on PCs without a joystick it 
  663. always is in the neutral position.
  664.   Some idiot (me) made the 386 stack pointer point to the Spectrum 
  665. ROM a very short while.  Not any more.
  666.   JPP now doesn't use any 386-specific instructions until it has 
  667. checked that the processor actually is a 386.
  668.   "specdisc.exe" added.
  669.  
  670.   Beta 4
  671.   Changed to a different CPU test; the old one crashed on at least 
  672. two systems.
  673.   Reenabled VGA-present test; the old CPU test made it crash.
  674.   Carved backtracking completely out of the code.
  675.   Fixed another bug in IN r,(C); carry and the two unused flag 
  676. bits are preserved.
  677.   Fixed a bug which prevented more than 50% of the screen from 
  678. flashing at the same time.  Speeded up the flash routine.
  679.   Fixed a truly horrible bug.  A routine was declared near but 
  680. called far, and so left two bytes on the stack after each 
  681. invocation, eventually overflowing the stack.  Bad shit.
  682.   *Really* fixed IN r,(C); the previous fix cancelled the one 
  683. before.
  684.   Finally wrote the exact-speed version.  No tape support yet and 
  685. it's horrible on my machine (a 16Mhz 386SX), but it may work on 
  686. fast enough machines.  Or again it may not.
  687.   Fixed a bug whereby SLA (HL) rotated a random bit into bit 0.
  688.   Fixed a bug in JPP-486 HALT; the clock counters weren't updated.  
  689. Now the counters are updated and the normal speed control systems 
  690. handles the HALTing.
  691.   Rewrote the sound frequency control system; I stupidly made the 
  692. sound at the correct spot in the 50Hz time slice, wasting time 
  693. until it arrived.
  694.   Added a hack to update the whole screen immediately whenever an 
  695. LDIR has destination 4000h or 5800h.
  696.   Added OUTD (partially) so International Karate will run.
  697.   Changed startup code slightly.
  698.   Added register and memory dump when the emulator aborts.
  699.  
  700.  
  701.  
  702.                               Todo
  703.                  (don't seem to ever get done)
  704.  
  705. - Implement disk support by breakpointing the ROM save/load 
  706. routines.
  707. - Label the function keys along the top of the screen.
  708. - Implement a help screen on F1 with a picture of a Spectrum 
  709. keyboard.
  710. - Add tape support to the exact-speed version.
  711. - Find out why JPP won't run after BC++ 3.0 has been run.
  712. - Fix Pause.
  713. - Find out why JPP-486 responds like a dead log to keypresses when 
  714. sound is being made.
  715.